package main
// 动态判断编码
// go get golang.org/x/net/html

import (
	"net/http"
	"fmt"
	"io/ioutil"
	"golang.org/x/text/transform"
	"io"
	"golang.org/x/text/encoding"
	"golang.org/x/net/html/charset"
	"bufio"
	"regexp"
)

func main()  {

	resp,err := http.Get("http://www.zhenai.com/zhenghun")

	if err != nil {
		panic(err)
	}

	defer resp.Body.Close()

	if resp.StatusCode != http.StatusOK {
		fmt.Println("Error:Status Code, ",resp.StatusCode)
		return
	}

	// 动态判断编码
	e := determinEncoding(resp.Body)

	utf8Reader := transform.NewReader(resp.Body,
		e.NewDecoder())

	all,err := ioutil.ReadAll(utf8Reader)
	if err != nil {
		panic(err)
	}

	fmt.Printf("%s\n",all)

	printCityInfo(all)

}

// 将response.Body 作为参数传入到函数中
// 会自动返回编码格式
func determinEncoding(r io.Reader) encoding.Encoding  {

	bytes , err := bufio.NewReader(r).Peek(1024)
	if err != nil {
		panic(err)
	}
	// 查找编码格式
	e,_,_ := charset.DetermineEncoding(bytes,"")
	// 返回编码格式
	return e
}

func printCityInfo(s []byte)  {
	// ^[a-z]
	// [^[a-z]]
	// [a-z0-9]+
	//
	// class=""
	// >
	//[^<].+ 汉字城市名字
	match := regexp.MustCompile(`<a href="http://www.zhenai.com/zhenghun/[a-z0-9]+"[^>].+>[^<].+</a>`)

	bytes := match.Find(s)

	fmt.Printf("%s\n",bytes)
}

